package com.example.seckill.service.impl;

import com.example.seckill.service.RateLimiterService;
import com.google.common.util.concurrent.RateLimiter;
import org.springframework.stereotype.Service;


@Service
public class RateLimiterServiceImpl implements RateLimiterService {

    /**
     * 每秒钟只发出10个令牌，拿到令牌的请求才可以进入秒杀过程
     * 存在误差，实际执行过程可能会有多于10个令牌，但是能过滤掉绝大部分请求
     */
    private RateLimiter rateLimiter = RateLimiter.create(10);

    /**
     * 尝试获取令牌
     * @return
     */
    @Override
    public boolean tryAcquireSeckill() {
        return rateLimiter.tryAcquire();
    }
}
